package com.ccnode.codegenerator.taikaoback.util;

import lombok.Data;

import java.io.Serializable;

/**
 * 分页请求参数类
 * 用于统一分页参数的接收和验证
 */
@Data
public class PageRequest implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 当前页码，从1开始
     */
    private Integer pageNum = 1;

    /**
     * 每页显示条数
     */
    private Integer pageSize = 20;

    /**
     * 排序字段
     */
    private String sortBy;

    /**
     * 排序方向：asc-升序，desc-降序
     */
    private String sortOrder = "desc";

    /**
     * 构造函数
     */
    public PageRequest() {
    }

    /**
     * 构造函数
     * @param pageNum 页码
     * @param pageSize 每页大小
     */
    public PageRequest(Integer pageNum, Integer pageSize) {
        this.pageNum = pageNum != null && pageNum > 0 ? pageNum : 1;
        this.pageSize = pageSize != null && pageSize > 0 ? pageSize : 20;
    }

    /**
     * 构造函数
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param sortBy 排序字段
     * @param sortOrder 排序方向
     */
    public PageRequest(Integer pageNum, Integer pageSize, String sortBy, String sortOrder) {
        this(pageNum, pageSize);
        this.sortBy = sortBy;
        this.sortOrder = sortOrder != null && !sortOrder.isEmpty() ? sortOrder : "desc";
    }

    /**
     * 获取偏移量
     * @return 偏移量
     */
    public long getOffset() {
        return (long) (pageNum - 1) * pageSize;
    }

    /**
     * 验证并修正分页参数
     */
    public void validate() {
        if (pageNum == null || pageNum < 1) {
            pageNum = 1;
        }
        if (pageSize == null || pageSize < 1) {
            pageSize = 20;
        }
        if (pageSize > 100) {
            pageSize = 100;
        }
        if (sortOrder == null || (!sortOrder.equalsIgnoreCase("asc") && !sortOrder.equalsIgnoreCase("desc"))) {
            sortOrder = "desc";
        }
    }
}
